var Tool = require("tool.js");

/**
 * 导入js
 */
var Log = require("core_log.js");

/**
 * 定义用户授权设置信息枚举类型
 * 参考文档：https://developers.weixin.qq.com/miniprogram/dev/api/AuthSetting.html
 * 参考权限文档：https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html
 */
var AuthSetting = {
  /*
    * 是否授权用户信息
    * 对应接口 wx.getUserInfo: https://developers.weixin.qq.com/miniprogram/dev/api/wx.getUserInfo.html
    */
  UserInfo: "scope.userInfo",
  /*
    * 是否授权地理位置
    * 对应接口 wx.getLocation, wx.chooseLocation: https://developers.weixin.qq.com/miniprogram/dev/api/wx.chooseLocation.html
    */
  UserLocation: "scope.userLocation",
  /*
    * 是否授权通讯地址
    * 对应接口 wx.chooseAddress: https://developers.weixin.qq.com/miniprogram/dev/api/wx.chooseAddress.html
    */
  Address: "scope.address",
  /*
    * 是否授权发票抬头
    * 对应接口 wx.chooseInvoiceTitle: https://developers.weixin.qq.com/miniprogram/dev/api/wx.chooseInvoiceTitle.html
    */
  InvoiceTitle: "scope.invoiceTitle",
  /*
    * 是否授权获取发票
    * 对应接口 wx.chooseInvoice: https://developers.weixin.qq.com/miniprogram/dev/api/wx.chooseInvoice.html
    */
  Invoice: "scope.invoice",
  /**
   * 是否授权微信运动步数
   * 对应接口 wx.getWeRunData: https://developers.weixin.qq.com/miniprogram/dev/api/wx.getWeRunData.html
   */
  Werun: "scope.werun",
  /*
    * 是否授权录音功能
    * 对应接口 wx.startRecord: https://developers.weixin.qq.com/miniprogram/dev/api/wx.startRecord.html
    */
  Record: "scope.record",
  /*
    * 是否授权保存到相册 wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum
    */
  WritePhotosAlbum: "scope.writePhotosAlbum",
  /*
    * 是否授权摄像头，对应<camera /> 组件
    */
  Camera: "scope.camera"
}

/**
 * 授权功能
 * 
 * @_authSettingType AuthSetting授权类型
 * @_success 指定权限已经获得则调用
 */
function checkAuth(
  _authSettingType, 
  _success
) {
  var logCallerName = checkAuth.name;
  // 获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限
  wx.getSetting({
    success: res => {
      if (res.authSetting[_authSettingType]) {  // 1.已获取到指定授权
        Log.debug(logCallerName, '已获得[' + _authSettingType + ']授权', res);
        // 已获取到指定授权时调用
        _success(res);
      } else {                                  // 2.未获取到指定授权
        // 例如：当选择授权弹出框上的[拒绝]按钮时，不会获取到当前指定授权
        Log.debug(logCallerName, '未能获得[' + _authSettingType + ']授权' , res);
      }
    },
    fail: function (error) {
      const message = '获取设置[' + _authSettingType + ']出错';
      Log.error(logCallerName, message , error);
      Tool.showInfo(message);
    }
  })
}

/**
 * 跳转到授权页面
 * 
 * wx.openSetting已经废弃，要用button去主动触发授权
 * 用户没有获得指定授权，请跳转授权页面
 * 
 * @_authPageUrl 授权页面Url
 */
function toAuthPage(_authPageUrl){
  var logCallerName = toAuthPage.name;
  //
  wx.showModal({
    title: '警告',
    content: '尚未进行授权，请点击确定跳转到授权页面进行授权。',
    success: function (res) {
      if (res.confirm) {  // 跳转到自定义授权页面
        Log.debug(logCallerName, '跳转到授权页面[' + _authPageUrl + ']');
        // 跳转
        wx.navigateTo({
          url: _authPageUrl
        })
      }
    }
  });
}

/**
 * 暴露Api
 */
module.exports = {
  AuthSetting: AuthSetting,
  checkAuth: checkAuth,
  toAuthPage: toAuthPage
};